package cn.gong.movie.db;

import java.util.ArrayList;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cn.gong.movie.bean.Movie;
import framework.store.annotaion.DBField;

public class DbMovie extends DbBase {
	public static final String TABLE = "movie";

	@DBField(ID_PK_AUTO)
	public static final String ID = "id";
	@DBField(VARCHAR)
	public static final String NAME = "name";
	@DBField(VARCHAR + "(8)")
	public static final String DATE = "date";
	@DBField(INTEGER)
	public static final String STATUS = "status";

	public long setMovie(Movie movie) {
		SQLiteDatabase db = getDb();

		ContentValues values = new ContentValues();
		values.put(NAME, movie.getName());
		values.put(DATE, movie.getDate());
		values.put(STATUS, movie.getStatus());
		long id = db.insert(TABLE, null, values);

		closeDb(db);
		db = null;

		return id;
	}

	// query()方法实际上是把select语句拆分成了若干个组成部分，然后作为方法的输入参数：
	// SQLiteDatabase db = databaseHelper.getWritableDatabase();
	// Cursor cursor = db.query("person", new String[]{"personid,name,age"},
	// "name like ?", new String[]{"%传智%"}, null, null, "personid desc", "1,2");
	// while (cursor.moveToNext()) {
	// int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
	// String name = cursor.getString(1);//获取第二列的值
	// int age = cursor.getInt(2);//获取第三列的值
	// }
	// cursor.close();
	// db.close();
	// 上面代码用于从person表中查找name字段含有“传智”的记录，匹配的记录按personid降序排序，对排序后的结果略过第一条记录，只获取2条记录。
	// query(table, columns, selection, selectionArgs, groupBy, having, orderBy,
	// limit)方法各参数的含义：
	// table：表名。相当于select语句from关键字后面的部分。如果是多表联合查询，可以用逗号将两个表名分开。
	// columns：要查询出来的列名。相当于select语句select关键字后面的部分。
	// selection：查询条件子句，相当于select语句where关键字后面的部分，在条件子句允许使用占位符“?”
	// selectionArgs：对应于selection语句中占位符的值，值在数组中的位置与占位符在语句中的位置必须一致，否则就会有异常。
	// groupBy：相当于select语句group by关键字后面的部分
	// having：相当于select语句having关键字后面的部分
	// orderBy：相当于select语句order by关键字后面的部分，如：personid desc, age asc;
	// limit：指定偏移量和获取的记录数，相当于select语句limit关键字后面的部分。

	public ArrayList<Movie> getMovies(long lastId, int status) {
		SQLiteDatabase db = getDb();
		String selection = STATUS + "=?";
		String[] selectionArgs = null;
		if (lastId >= 0) {
			selection += " and " + ID + "<?";
			selectionArgs = new String[] { String.valueOf(status), String.valueOf(lastId) };
		} else {
			selectionArgs = new String[] { String.valueOf(status) };
		}

		Cursor cursor = db.query(TABLE, null, selection, selectionArgs, null, null, ID + " desc", "0,20");
		ArrayList<Movie> movies = new ArrayList<Movie>();
		while (cursor.moveToNext()) {
			Movie movie = new Movie();
			movie.setId(getCursorLong(cursor, ID));
			movie.setName(getCursorString(cursor, NAME));
			movie.setDate(getCursorString(cursor, DATE));
			movie.setStatus(getCursorInt(cursor, STATUS));
			movies.add(movie);
		}
		closeDbAndCursor(db, cursor);
		db = null;
		cursor = null;
		return movies;
	}

	public void changeStatus(long id, int status) {
		SQLiteDatabase db = getDb();
		ContentValues values = new ContentValues();
		values.put(STATUS, status);

		db.update(TABLE, values, ID + "=?", new String[] { id + "" });

		closeDb(db);

		db = null;
	}

	public void deleteMovie(long id) {
		SQLiteDatabase db = getDb();
		db.delete(TABLE, ID + "=?", new String[] { id + "" });

		closeDb(db);

		db = null;
	}

	public int updateMovie(Movie movie) {
		SQLiteDatabase db = getDb();

		ContentValues values = new ContentValues();
		values.put(NAME, movie.getName());
		values.put(DATE, movie.getDate());
		values.put(STATUS, movie.getStatus());
//		long id = db.insert(TABLE, null, values);
		int update = db.update(TABLE,values, ID + "=?", new String[] { movie.getId() + "" });

		closeDb(db);
		db = null;

		return update;
	}

}
